package org.huangrui.spark.scala.core.rdd.operate.transform

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Author hr
 * @Create 2024-10-17 8:45 
 */
object Spark07_Operate_Transform_SortBy {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[*]").setAppName("spark")
    val sc = new SparkContext(conf)
    val nums = List(1, 33, 3, 2, 4, 11)
    val rdd = sc.parallelize(nums, 2)

    // TODO sortBy方法：按照指定的排序规则对数据进行排序
    //      sortBy方法可以传递三个参数
    //           第一个参数表示排序规则:
    //                Spark会为每一个数据增加一个标记，然后按照标记对数据进行排序
    //           第二个参数表示排序的方式：升序（true），降序(false)
    //           第三个参数表示分区数量
    /*
      1, 33, 3, 2, 4, 11
      ------------------
      标记：1, 33, 3, 2, 4, 11
      =>
      标记：1，2，3，4，11，33
      ---------------------
      数据：1，2，3，4，11，33
      -----------------------------------------------------
          1,   33,   3,   2,   4,    11
      ------------------
     标记："1", "33", "3", "2", "4", "11"
     -----------------------------
     标记："1", "11", "2", "3", "33", "44"
     -----------------------------
           1,  11,  2,    3,   33, 44
     */
    rdd.saveAsTextFile("output1")
    val newRdd = rdd.sortBy((x: Int) => x, ascending = true, 2)
    newRdd.saveAsTextFile("output2")
    newRdd.foreach(println)

    sc.stop()
  }
}
